我們在寫網頁要引入 其他js
不是都要用這個 Tag,像要導入jquery
Google Analytics 之類的第三方套件嗎?網址都是其他 Domain 的,但是卻能正常載入。
JSONP 就是利用的這個特性來達成跨來源請求的。
###瀏覽器端
1.html 需要兩段Javascript
一個函式可處理伺服器回傳的JSNOP資料 在下面的範例中
此函式為 show()
2.一個 元件中的src屬性 可向遠端伺服器發送JSON資料請求
<script>
function show(data){
//處理資料顯示資料
//於頁面程式敘述
}
</script>
<script src="https://example.org/jsonp"></script>
###伺服器端
伺服器回應 會包含一個呼叫資料處理的命名函式 (上面鎖定義的函式)
此函式呼叫 在JSONP 中一個像是填補的動作 JSON格式 資料則以引數方式傳遞函式中
在下面 JSONP資料在呼叫show()
函式時便至於引數位置
show({
"events":[
{
"location":"taipei";
"date":"OCT 31",
"MAP":"img/cat.png"
}
]
})
注意:利用 JSONP,也可以存取跨來源的資料。但 JSONP 的缺點就是你要帶的那些參數永遠都只能用附加在網址上的方式(GET)帶過去,沒辦法用 POST。
重要的事 在此運用JSONP 不需要使用JSON物件 parse()
stringify()
因為資料是以一個程式腳本檔案傳送 非字串 被視為一個物件。
localHandler({"result":"我是遠方js帶來的數據"});
本機
<script type="text/javascript">
var localHandler = function(data){
alert('我是本地函數,可以被跨域的remote.js文件調用,遠程js帶來的資料是:' + data.result);
};
</script>
<script type="text/javascript" src="跨域服務器/remote.js"></script>
1、本機定義一個函數
2、引入一個js
3、被引入的js裏面,調用這個函數
頁面將會彈出一個提示窗。顯示本機函數被跨域的遠程js調用成功,並且還接收到了 我是遠程js帶來的資料。
###與AJAX的區別是什麽?
ajax和jsonp本質上是不同的東西。
ajax的核心是通過XmlHttpRequest獲取非本頁內容
jsonp的核心則是動態添加標簽來調用服務器提供的js腳本。